/**
 * @desc 文件流处理
 */

const koaRouter = require("koa-router")
const fs = require("fs")
const path = require("path")
const { randomStr } = require("../utils")

const router = koaRouter()

// 单文件上传
router.post("/upload", ctx => {
    // 通过这种方式获取第一个文件对象
    const fileKey = Object.keys(ctx.request.files)[0]
    const file = ctx.request.files[fileKey]

    // 创建文件阅读对象
    const fileReader = fs.createReadStream(file.path)

    // 获取文件后缀名
    const ext = file.name.split(".").pop()

    // 生成文件,并将文件流注入到文件中
    const fileDir = path.resolve(__dirname, "../upload")
    const hasDir = checkDirPath(fileDir)

    // 如果没有文件夹，则创建
    !hasDir && fs.mkdirSync(fileDir)

    const fileName = `${randomStr()}.${ext}`
    const filePath = `${fileDir}/${fileName}`

    const fileStream = fs.createWriteStream(filePath)
    fileReader.pipe(fileStream)

    return (ctx.body = { code: 1000, msg: "上传成功", data: `upload/${fileName}` })
})

// 判断是否存在文件夹
function checkDirPath(path) {
    try {
        fs.accessSync(path)
        return true
    } catch (err) {
        return false
    }
}

module.exports = router
